package com.itheima.myreggie2.controller;
import com.itheima.myreggie2.common.R;
import lombok.extern.slf4j.Slf4j;
import org.apache.tomcat.util.http.fileupload.IOUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.UUID;

/**     公共的表现层
 *   文件上传和下载
 */

@Slf4j
@RestController
@RequestMapping("/common") //请求前缀/地址，看接口文档
public class CommonController {

    /**
     * #### 接口一：图片上传的接口
     * 请求url地址：/common/upload
     * 请求方式：POST
     * 请求参数：二进制文件 【 MultipartFile  file】 name=file
     * 响应结果【格式统一】：R 对象
     */
    @PostMapping("/upload")
    public R<String> uploadImg(MultipartFile file) throws IOException {//注意：此处的key一定要设置成fiel
        /**
         *  springMvc提供的文件上传的功能：其中为我们提供了一个Api：MultipartFile
         *  我们当前的图片信息就封装到了这个MultipartFile对象中
         *    接下来的操作：
         *       1.获取图片名称（主要为了图片的后缀名成：xxx.img）
         *       2.生成随机的图片名称，使用UUID生成
         *       3.使用/借助 MultipartFile对象提供的方法，将其内部的图片资源直接存到本地磁盘
         */
        //1.获取图片名称（主要为了图片的后缀名成：xxx.img） getOriginalFilename:获取初始的文件名称
        String originalFilename = file.getOriginalFilename();   //xxx.jpg

        //此时图片名称拿到了，但是我们要的是图片名称的后缀(imgSuffix)，需要截取,字符串的截取  .jpg
        String imgSuffix = originalFilename.substring(originalFilename.lastIndexOf("."));//这要写包括“.”，括号里添加，10的位置就不包括
        //2.使用UUID工具类生成随机的图片名称
        String imgRandomName = UUID.randomUUID().toString()+imgSuffix;
        //新的图片名称= 随机图片名称+图片名后缀
        String imgName= imgSuffix+imgRandomName; //xxx.jpg
        //3.使用/借助 MultipartFile对象提供的方法，将其内部的图片资源直接存到本地磁盘
        file.transferTo(new File("d://myImg//"+imgName));//把图片imgName放到s盘的myImg文件夹里
        return R.success("imgName");  //返回的是图片名称

    }
    /**  图片下载
     *  接口二：图片文件下载接口：
     *   请求url地址：/common/download  ?name=81876c51-1e34-45ad-8dfb-ba80fb1a3d67.jpg
     *   请求方式：GET
     *   请求参数： ?name=81876c51-1e34-45ad-8dfb-ba80fb1a3d67.jpg    参数 ：k=v形式
     *   响应结果：二进制数据【图片内容】 reponse.getWriter()  reponse.getOutputStream();
     */
    @GetMapping("/download")
    public void downloadImg(HttpServletResponse response,String name) throws IOException {
        /**   这个name就是当前图片下载的名称
         *   响应结果是一张图片数据，直接使用response封装图片数据到响应体中即可，因此当前方法返回值设置成void
         *   直接用response去响应，在（）里加上要啥框架会给我们提供啥
         */

        //将服务器指定盘符中的图片数据，写入到响应体中
        //选择 IOUtils org.apache.tomcat.util.http.fileupload
        //当前图片在  //e://myImg//+name （因为就差一个名称了，所以把name加上）
        IOUtils.copy(new FileInputStream("d://myImg//"+name),response.getOutputStream());
        //ctrl+P，第一个要输入流（即图片文件，把路径地址放进去），第二个要的是一个输出流

    }








}
